<script>
	import logger from './utils/logger'; // app.js
	import {
		genTestUserSig
	} from './debug/GenerateTestUserSig.js';
	import {isEmpty,isNotEmpty,getLocationInfo} from '@/utils/utils';
	import cache from '@/utils/cache.js'
	import {cacheKey, commonConstant} from '@/common/constant.js';
	
	// #ifdef APP-PLUS
	import Aegis from 'aegis-weex-sdk';
	// #endif
	
	// #ifdef MP-WEIXIN
	import Aegis from 'aegis-mp-sdk';
	// #endif
	
	// #ifdef H5
	import Aegis from 'aegis-web-sdk';
	// #endif
	
   // APP 和 小程序平台
   // #ifdef  APP-PLUS || MP-WEIXIN   
	import TIM from 'tim-wx-sdk';
	import COS from 'cos-wx-sdk-v5';
    // #endif
	
	// #ifdef H5
	import TIM from 'tim-js-sdk';
	import TIMUploadPlugin from 'tim-upload-plugin'
	//logger.error(' TUIKit 暂不支持 H5 / web ，请使用者自己完成兼容哦，页面刷新可能会导致报错，需要重新登录 ');
	// #endif

	const aegis = new Aegis({
		id: 'iHWefAYqKznuxWjLnr', // 项目key
		reportApiSpeed: true, // 接口测速
	});
	uni.$aegis = aegis
	// 首先需要通过 uni.requireNativePlugin("ModuleName") 获取 module
	// #ifdef APP-PLUS
	const TUICalling = uni.requireNativePlugin('TUICallingUniPlugin-TUICallingModule');
	logger.log(`| app |  TUICallingUniPlugin-TUICallingModule | TUICalling: ${TUICalling}`);
	if(typeof(TUICalling) == 'undefined') {
		logger.error('如果需要音视频功能，请集成原生插件，使用真机运行并且自定义基座调试哦～ 插件地址：https://ext.dcloud.net.cn/plugin?id=7097 , 调试地址：https://nativesupport.dcloud.net.cn/NativePlugin/use/use');
	}
	// #endif
	
	const app = getApp();
	
	//import {configInfo} from '@/common/http.api.js'
	export default {
		onLaunch() {
			uni.$u.http.post('/app/config/get', {key:'tim_sdk_app_id,default_avatar'} ).then(res => {
				if (res.code === 0){
					var info = {};
					info.timSdkAppId = parseInt(res.data.tim_sdk_app_id);
					info.defaultAvatar = res.data.default_avatar;
					this.globalData.appInfo = info;
					this.$store.state.$appInfo = info;
					const SDKAppID = this.globalData.appInfo.timSdkAppId;
					uni.$aegis.reportEvent({
							name: 'onLaunch',
							ext1: 'onLaunch-success',
							ext2: 'uniTuikitExternal',
							ext3: `${SDKAppID}`,
					})
					uni.setStorageSync(`TIM_${SDKAppID}_isTUIKit`, true);
					console.log('App Launch')
					// 重点注意： 为了 uni-app 更好地接入使用 tim，快速定位和解决问题，请勿修改 uni.$TUIKit 命名。
					// 如果您已经接入 tim ，请将 uni.tim 修改为 uni.$TUIKit。
					uni.$TUIKit = TIM.create({
						SDKAppID: SDKAppID
					});
					// #ifndef H5
					uni.$TUIKit.registerPlugin({
						'cos-wx-sdk': COS
					});
					// #endif
					
					// #ifdef H5
					uni.$TUIKit.registerPlugin({ 'tim-upload-plugin':TIMUploadPlugin })
					// #endif
					// 如果您已创建了 tim，请将 tim 实例挂载在 wx 上，且不可以修改 wx.$TIM（修改变量可能导致 TUICalling 组件无法正常使用）, 完成 TUICalling 初始化，
					// 如果您没有创建，可以不传
					// #ifdef MP-WEIXIN
					wx.$TIM = uni.$TUIKit;
					// #endif
					uni.$TUIKitTIM = TIM;
					uni.$TUIKitEvent = TIM.EVENT;
					uni.$TUIKitVersion = TIM.VERSION;
					uni.$TUIKitTypes = TIM.TYPES; // 监听系统级事件
					uni.$resetLoginData = this.resetLoginData();
					// 登录成功后会触发 SDK_READY 事件，该事件触发后，可正常使用 SDK 接口
					uni.$TUIKit.on(uni.$TUIKitEvent.SDK_READY, this.onSDKReady, this);
					uni.$TUIKit.on(uni.$TUIKitEvent.SDK_NOT_READY, this.onSdkNotReady, this);
					uni.$TUIKit.on(uni.$TUIKitEvent.KICKED_OUT, this.onKickedOut, this);
					uni.$TUIKit.on(uni.$TUIKitEvent.ERROR, this.onTIMError, this);
					uni.$TUIKit.on(uni.$TUIKitEvent.NET_STATE_CHANGE, this.onNetStateChange, this);
					uni.$TUIKit.on(uni.$TUIKitEvent.SDK_RELOAD, this.onSDKReload, this);
					// 收到推送的单聊、群聊、群提示、群系统通知的新消息
					uni.$TUIKit.on(uni.$TUIKitEvent.MESSAGE_RECEIVED, this.onReceiveMessage, this);
					// 收到会话列表更新通知
					uni.$TUIKit.on(uni.$TUIKitEvent.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated,this);
					this.$isResolve()
				}
			}).catch(err => {
					uni.showToast({
						title:'获取配置错误',
						icon:'error',
						duration:850
					});	
			})
		},
		onShow: function() {
			uni.onTabBarMidButtonTap(() => {
				let loginFlag = uni.getStorageSync(cacheKey.IS_LOGIN) || false;
				if(loginFlag){
					let authStatus = this.$store.state.member.memberInfo.authStatus;
					if(authStatus === 0){
						let locale = this.$i18n.locale;
						if(locale === 'zh-Hans'){
							uni.navigateTo({
								url: "/pages/common/auth/zh_auth",
							})
						}else{
							uni.navigateTo({
								url: "/pages/common/auth/en_auth",
							})
						}
					}else{
						uni.navigateTo({
							url: "/pages/common/good/release",
						})
					}
				}else{
					uni.showToast({
						title: '请登录后操作',
						duration: 2000,
						icon:'error'
					});
				}
			})
		},
		onHide: function() {
			console.log('App Hide')
		},
		globalData: {
			appinfo:{},
			userSig: null,
			avatar: null,
			nickname: null,
			userId: null,
			SDKAppID: null,
		},
		methods:{
			resetLoginData() {
				
			},
			onTIMError() {},
			onConversationListUpdated(event){
				console.info('收到会话列表更新通知：' + JSON.stringify(event));
				this.$store.commit("updateConversationList", event.data);
			},
			onReceiveMessage(event) {
				console.info('收到推送的消息：' + JSON.stringify(event));
				this.$store.commit("pushCurrentMessageList", event.data);
			},
			onSDKReady({name}) {
				let isSDKReady = false
				if(name === uni.$TUIKitEvent.SDK_READY){
					isSDKReady = true;
				}
				debugger
				//自动监听并更新 sdk 的ready 状态 （未登录是 notReady  登录后是ready）
				this.$store.commit("toggleIsSDKReady", isSDKReady);
				debugger
                //sdk ready 后  肯定完成了登录操作    这里可以获取用户存储在im的基础信息/离线消息/黑名单列表
				const timBindFlag = uni.getStorageSync('tim_bind_flag');
				if(isEmpty(timBindFlag) && !timBindFlag){
					let userInfo = uni.getStorageSync(cacheKey.MEMBER_INFO);
					uni.$TUIKit.updateMyProfile({
					  nick: userInfo.nickname,
					  avatar: userInfo.avatar
					}).then(function(imResponse) {
					  uni.setStorageSync('tim_bind_flag', true);
					  console.log('资料更新成功：' + JSON.stringify(imResponse.data)); // 更新资料成功
					  uni.$TUIKit.getMyProfile().then(function(imResponse) {
					    console.log('我的资料：' + JSON.stringify(imResponse.data)); // 个人资料 - Profile 实例
					  }).catch(function(imError) {
					    console.warn('getMyProfile error:', imError); // 获取个人资料失败的相关信息
					  });
					}).catch(function(imError) {
					  console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
					});
				}
			},
			onNetStateChange() {},
			onSDKReload() {},
			onSdkNotReady() {
				this.$store.commit("toggleIsSDKReady", false);
				uni.$TUIKit.login({
					userID: this.globalData.userId + '',
					userSig: this.globalData.userSig
				}).then((restwo) => {
					if (restwo.data.repeatLogin === true) {
						// 标识账号已登录，本次登录操作为重复登录。v2.5.1 起支持
						console.log(restwo.data.errorInfo);
					}else{
						this.$store.commit("toggleIsLogin", true);
						this.$store.commit("setTimUserInfo",restwo.data)
						//tim 返回的用户信息
						//uni.setStorageSync('userTIMInfo', JSON.stringify(res.data))
						uni.$aegis.reportEvent({
							name: 'login',
							ext1: 'login-success',
							ext2: 'uniTuikitExternal',
							ext3: `${this.globalData.SDKAppID}`,
						})
					}
				}).catch((error) => {
					uni.$aegis.reportEvent({
						name: 'login',
						ext1: `login-failed#error:${error}`,
						ext2: 'uniTuikitExternal',
						ext3: `${this.globalData.SDKAppID}`,
					})
				})
			},
			onKickedOut() {
				uni.showToast({
					title: '您被踢下线',
					icon: 'error'
				});
				uni.navigateTo({
					url: '/pages/common/public/login_one'
				});
			}
		}
	}
</script>

<style lang="scss">
	/* 注意要写在第一行，同时给style标签加入lang="scss"属性 */
	@import "uview-ui/index.scss";
	//@import url('@/static/icon/iconfont.css');
	@import url("@/static/icon/iconfont.css");
</style>
